package com.clx.nettry;


import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

//类继承 ChannelInboundHandlerAdapter，从而具备 “处理入站事件（如接收客户端数据）” 的能力
public class MyChannelHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception{
        // 1. 将接收到的“消息对象”转换为 Netty 的 ByteBuf 类型
        ByteBuf byteBuf = (ByteBuf) msg;
        // 2. 打印客户端发送的消息（ByteBuf → UTF-8 字符串）
        System.out.println("收到客户端发过来的消息：" + byteBuf.toString(StandardCharsets.UTF_8));
        // 3. 向客户端回送消息：
        // - Unpooled.copiedBuffer(...)：创建一个包含“hello client”字节（UTF-8 编码）的 ByteBuf
        // - ctx.channel().writeAndFlush(...)：将 ByteBuf 写入通道，并立即“刷新”（确保客户端能收到）
        ctx.channel().writeAndFlush(Unpooled.copiedBuffer("hello client".getBytes(StandardCharsets.UTF_8)));
    }
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        //出现异常的时候执行的动作（打印并关闭通道）
        cause.printStackTrace();
        // 2. 关闭通道（出现异常时，及时释放网络资源）
        ctx.close();
    }
}
